package com.pilipala.controller;

import com.pilipala.dto.PageinationDTO;
import com.pilipala.dto.VideoDTO;
import com.pilipala.dto.VideoPageDTO;
import com.pilipala.result.PageResult;
import com.pilipala.result.Result;
import com.pilipala.service.VideoService;
import com.pilipala.utils.AliOssUtil;
import com.pilipala.vo.CommentVO;
import com.pilipala.vo.VideoVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/api/video")
@Slf4j
@Tag(name = "视频相关接口")
public class VideoController {

    @Autowired
    public VideoService videoService;
    /**
     * 上传封面
     * @param file 上传的文件
     * @return 返回拼装的封面路径
     */
    @PostMapping("/uploadCover")
    @Operation(summary = "上传封面")
    public Result<String> uploadCover(MultipartFile file){
        log.info("上传封面中-----");
        String coverUrl = videoService.uploadCover(file);
        return Result.success(coverUrl);
    }

    /**
     * 上传视频
     * @param file 上传的文件
     * @return 返回拼装的路径
     */
    @PostMapping("/uploadVideo")
    @Operation(summary = "上传视频文件")
    public Result<String> uploadVideo(MultipartFile file){
        log.info("上传视频中---");
        String videoUrl = videoService.uploadVideo(file);
        return Result.success(videoUrl);
    }

    /**
     * 新增视频字段
     * @param videoDTO 视频的所有字段
     * @return 无
     */
    @PostMapping("/create")
    @Operation(summary = "固定到持久化层")
    public Result<?> create(@RequestBody VideoDTO videoDTO){
        log.info("新增视频字段---{}",videoDTO);
        videoService.create(videoDTO);
        return Result.success();
    }

    /**
     * 根据用户Id获取视频
     * @param videoPageDTO 用户Id
     * @return 分页后的视频数据
     */
    @GetMapping("/get")
    @Operation(summary = "根据用户Id获取视频")
    public Result<PageResult> listByCondition(VideoPageDTO videoPageDTO){
        log.info("获取视频---查询信息：{}",videoPageDTO);
        PageResult pageResult = videoService.getByUserId(videoPageDTO);
        return Result.success(pageResult);
    }

    /**
     * 用于首页显示视频,不带任何条件直接返回视频数据
     * @param videoPageDTO 分页大小
     * @return 分页后的视频数据 包括total和records
     */
    @GetMapping("/list")
    @Operation(summary = "用于首页显示视频,不带任何条件直接返回视频数据")
    public Result<PageResult> list(VideoPageDTO videoPageDTO){
        log.info("获取视频信息----:{}",videoPageDTO);
        PageResult pageResult = videoService.listAll(videoPageDTO);
        return Result.success(pageResult);
    }

    /**
     * 根据视频Id获取视频数据
     * @param id 视频Id
     * @return 返回视频数据
     */
    @GetMapping("/getById/{id}")
    @Operation(summary = "根据视频Id获取视频数据")
    public Result<VideoVO> getById(@PathVariable Long id){
        log.info("根据视频Id获取视频数据");
        VideoVO videoVO = videoService.getById(id);
            log.info("搜索到的数据{}",videoVO);
        return Result.success(videoVO);
    }

    /**
     * 根据视频Id删除视频
     * @param id 视频id
     * @return 无
     */
    @DeleteMapping("/delete/{id}")
    @Operation(summary = "根据视频Id删除视频")
    public Result<?> delete(@PathVariable Long id){
        log.info("根据视频Id删除视频");
        videoService.delete(id);
        return Result.success();
    }

    /**
     * 根据视频Id修改视频
     * @param videoDTO 各种信息
     * @return 无
     */
    @PostMapping("/update")
    @Operation(summary = "根据视频Id修改视频")
    public Result<?> update(@RequestBody VideoDTO videoDTO){
        log.info("根据视频Id修改视频");
        videoService.update(videoDTO);
        return Result.success();
    }

    /**
     * 收藏视频
     * @param videoId 视频ID
     * @return 无
     */
    @PutMapping("/collection/{videoId}")
    @Operation(summary = "收藏视频")
    public Result<?> collectionHandle(@PathVariable Long videoId){
        log.info("收藏视频，视频Id：{}",videoId);
        videoService.collection(videoId);
        return Result.success();
    }

    /**
     * 获取收藏的video
     * @return 返回分页后的数据
     */
    @GetMapping("/getCollection")
    public Result<PageResult> getCollection(PageinationDTO pageinationDTO){
        log.info("获取收藏的video");
        PageResult pageResult = videoService.getCollection(pageinationDTO);
        return Result.success(pageResult);
    }

    /**
     * 点赞视频
     * @param videoId 视频Id
     * @return 无
     */
    @PutMapping("likes/{videoId}")
    @Operation(summary = "点赞视频")
    public Result<?> likes(@PathVariable Long videoId){
        log.info("点赞视频，视频Id:{}",videoId);
        videoService.likes(videoId);
        return Result.success();
    }

}




